#!/usr/bin/env python
# -*- coding: utf-8 -*-

# Modulos 
import sys, gtk, pygame, utils, objetos
from pygame.locals import *

# Constantes

# Clases
# ---------------------------------------------------------------------

class ObjetoGraficoTexto(pygame.sprite.Sprite):
	def __init__(self, texto, posInicialx, posInicialy, posCorrectax, posCorrectay ):
		fuente = pygame.font.Font("fonts/justadream_solid.ttf", int(30*utils.RES))
		self.image = pygame.font.Font.render(fuente, texto, 1, (50,50,255))
		self.rect = self.image.get_rect()

		self.rect.centerx = posInicialx
		self.rect.centery = posInicialy

		self.valor = texto
		self.posInicialx = posInicialx
		self.posInicialy = posInicialy

		self.posCorrectax = posCorrectax
		self.posCorrectay = posCorrectay

		self.drag = False
		self.correcta = False
		self.sonido_correcto = pygame.mixer.Sound("sounds/click.wav")
		self.sonido_fallo = pygame.mixer.Sound("sounds/fallo.wav")


	def colocarPosicionInicial(self):
		self.rect.centerx = self.posInicialx
		self.rect.centery = self.posInicialy
		self.correcta = False			

	def verificarPosCorrecta(self):
		if abs(self.rect.centerx - self.posCorrectax) < 12 and abs(self.rect.centery - self.posCorrectay) < 15 :
			self.rect.centerx = self.posCorrectax
			self.rect.centery = self.posCorrectay
			self.correcta = True
			self.sonido_correcto.play()
			return True
		else:
			return False



# ---------------------------------------------------------------------
# identifica si una letra esta siendo arrastrada
def detectar_arrastre(objectosGraficos):
	x,y = pygame.mouse.get_pos()
	for item in objectosGraficos:
		if(item.rect.collidepoint(pygame.mouse.get_pos())):
			item.drag = True

# controla en donde se ha soltado la letra para saber si esta en el lugar correcto			
def soltar(objectosGraficos):
	for objGrafico in objectosGraficos:
		if objGrafico.drag == True:
			objGrafico.drag = False
			#print("Suelta objGrafico")
			if not(objGrafico.verificarPosCorrecta()) :
				#print("vuelve a la posicion original")
				objGrafico.colocarPosicionInicial()


#mueve las letras si estan siendo arrastradas por el mouse
def actualizar_objetos(objectosGraficos):
	for item in objectosGraficos:
		if(item.drag == True):
			item.rect.centerx,item.rect.centery = pygame.mouse.get_pos()

			
def dibujar(screen,cursor_picture, clock):
    salir = 0
    background_image = utils.load_image('images/fondo2.png')

    #boton de la flecha para continuar
    btn_adelante = objetos.BotonAdelante()
    btn_atras = objetos.BotonAtras()

    #texto superior derecho que indica el numero de clase
    clase2, clase2_rect = utils.texto_clase("Clase 2", 750*utils.RES, 15*utils.RES)

    titulo, titulo_rect = utils.textotlb("GOTA A GOTA", 200*utils.RES, 60*utils.RES, 30, color=(0, 0, 255))

    bajado = 40
    x1 = 178
    y1 = (40 + bajado)
    linea1,linea1_rect = utils.texto_normal('Urgente! Nos ha llegado este mapa', 	x1*utils.RES,(y1+(1*30))*utils.RES)
    linea2,linea2_rect = utils.texto_normal('que nos preocupo. Sabemos que lo ', 	x1*utils.RES,(y1+(2*30))*utils.RES)
    linea3,linea3_rect = utils.texto_normal('envio Bernardo Lasaguas, el cientifico  ', x1*utils.RES,(y1+(3*30))*utils.RES)
    linea4,linea4_rect = utils.texto_normal('loco que vive viajando por los', 		x1*utils.RES,(y1+(4*30))*utils.RES)
    linea5,linea5_rect = utils.texto_normal('oceanos del mundo, arriba de su barco ', 	x1*utils.RES,(y1+(5*30))*utils.RES)
    linea6,linea6_rect = utils.texto_normal('a vela. Nos esta queriendo decir algo... ',x1*utils.RES,(y1+(6*30))*utils.RES)
    linea7,linea7_rect = utils.texto_normal('pero, que sera?', 				x1*utils.RES,(y1+(7*30))*utils.RES)

    texto_final,texto_final_rect = utils.texto_subtitulo('Pueden ayudarnos a decifrar las claves de este mensaje?', 370*utils.RES,(300+bajado)*utils.RES)
           
    textoEncriptado = utils.load_image('images/clase2_mail.png', False)
    textoEncriptado_rect = (330*utils.RES,(60+bajado)*utils.RES)

    simbolos = utils.load_image('images/clase2_simbolos2.png', False)
    simbolos_rect = (200*utils.RES,(380+20)*utils.RES)

    linea_puntos = ObjetoGraficoTexto('--   --   --   --   --', 380*utils.RES,  390*utils.RES,  (0)*utils.RES,  (0)*utils.RES )
    completoTexto = ObjetoGraficoTexto('CORRECTO!!!', 400*utils.RES,  480*utils.RES,  (0)*utils.RES,  (0)*utils.RES )

    x = 250
    y = 320
    letraA = ObjetoGraficoTexto("A", (x+50)*utils.RES,  y*utils.RES,   (531)*utils.RES,  (372)*utils.RES )
    letraE = ObjetoGraficoTexto("E", (x+100)*utils.RES,  y*utils.RES,  (452)*utils.RES,  (372)*utils.RES )
    letraI = ObjetoGraficoTexto("I", (x+150)*utils.RES,  y*utils.RES,  (230)*utils.RES,  (372)*utils.RES )
    letraO = ObjetoGraficoTexto("O", (x+200)*utils.RES,  y*utils.RES,  (308)*utils.RES,  (372)*utils.RES )
    letraU = ObjetoGraficoTexto("U", (x+250)*utils.RES,  y*utils.RES,  (378)*utils.RES,  (372)*utils.RES )



    objetosGraficos = list()
    objetosGraficos.append(letraA)
    objetosGraficos.append(letraE)
    objetosGraficos.append(letraI)
    objetosGraficos.append(letraO)
    objetosGraficos.append(letraU)

    frames = 1
    cant_frames = 50
    while salir == 0:
    
    	# Pump GTK messages.
		while gtk.events_pending():
			gtk.main_iteration()
			
		for eventos in pygame.event.get():
			if eventos.type == QUIT:
				sys.exit(0)
			elif eventos.type == pygame.VIDEORESIZE:
			   pygame.display.set_mode(eventos.size, pygame.RESIZABLE)	
			elif eventos.type == MOUSEBUTTONDOWN:
				x,y = pygame.mouse.get_pos()
				if btn_adelante.rect.collidepoint(x, y) :
					salir = 2
					btn_adelante.sonido.play()	
				elif btn_atras.rect.collidepoint(x, y):
					salir = -1
					btn_atras.sonido.play()	
				detectar_arrastre(objetosGraficos)

			elif eventos.type == MOUSEBUTTONUP:
				soltar(objetosGraficos)


		#Actualiza los elementos arrastrados
		actualizar_objetos(objetosGraficos)

		# Realiza la animacion del texto	
		screen.blit(background_image, (0, 0))
		screen.blit(clase2, clase2_rect)

		screen.blit(titulo, titulo_rect)
		if frames > (1 * cant_frames) :
			screen.blit(linea1,linea1_rect)
			screen.blit(linea2,linea2_rect)
			screen.blit(linea3,linea3_rect)
			screen.blit(linea4,linea4_rect)
			screen.blit(linea5,linea5_rect)
			screen.blit(linea6,linea6_rect)
			screen.blit(linea7,linea7_rect)

		if frames > (2 * cant_frames) :
			screen.blit(textoEncriptado, textoEncriptado_rect)

		
		if frames > (3 * cant_frames) :
			screen.blit(simbolos, simbolos_rect)
			#completoCorrecto = True
			# SE SACA LUEGO DE LA PRESENTACION 
			#
			#for og in objetosGraficos:
			#	screen.blit(og.image,og.rect)
			#	if og.correcta == False :
			#		completoCorrecto = False
		
			#if completoCorrecto == True :
			#	screen.blit(completoTexto.image, completoTexto.rect)

			#screen.blit(linea_puntos.image, linea_puntos.rect)	

		if frames > (3 * cant_frames) :
			screen.blit(texto_final,texto_final_rect)	
		else:
			salir = 0
		
		screen.blit(btn_adelante.image, btn_adelante.rect)
		screen.blit(btn_atras.image, btn_atras.rect)
		screen.blit(cursor_picture, pygame.mouse.get_pos())
		pygame.display.flip()

		# Try to stay at 30 FPS
		clock.tick(30)
	    	frames = frames + 1 
    return salir


# This function is called when the game is run directly from the command line:
# ./TestGame.py 
def main():
	
	pygame.init()
	screen = pygame.display.set_mode((int(800*utils.RES), int(520*utils.RES)), pygame.RESIZABLE) #pygame.display.get_surface() #

	# Fake a Sugar cursor for the pyGame canvas area
	pygame.mouse.set_cursor((8,8),(0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0))
	cursor_picture = pygame.image.load('images/standardcursor.png')
	cursor_picture.convert_alpha() 
	clock = pygame.time.Clock()
	dibujar(screen,cursor_picture,clock)
 
if __name__ == '__main__':
   main()
